/**
 * TDS PEC 4
 * Grupo 3H2M 
 *
 * El paquete <code>edu.uoc.tds.pec4.rmi</code> contiene los interfaces
 * usados tanto por el servidor como por la aplicación cliente.
 */
package edu.uoc.tds.pec4.rmi;

import edu.uoc.tds.pec4.beans.CFisicaDTO;
import edu.uoc.tds.pec4.beans.EquipamientoDTO;
import edu.uoc.tds.pec4.beans.LocalizacionDTO;
import edu.uoc.tds.pec4.beans.RolDTO;
import edu.uoc.tds.pec4.beans.SolicitudDTO;
import edu.uoc.tds.pec4.beans.UsuarioDTO;
import edu.uoc.tds.pec4.common.util.Constantes;
import edu.uoc.tds.pec4.server.bbdd.exceptions.GestorConexionException;
import java.rmi.Remote;
import java.rmi.RemoteException; 
import java.util.List;

/**
 * La interfaz <code>GestorConexionInterface</code> especifica los métodos que se pueden
 * invocar de forma remota.
 *
 * @author	Isabel Guerra Monclova
 * @author	Luis Rodríguez-Manzaneque Sánchez
 * @version	03/11/2011
 * @since	1.00
 */
public interface GestorConexionInterface extends Remote {
    
    
    
    int[] TIPOS_SOLICITUD_JIFSOL = {Constantes.TIPO_SOLICITUD, Constantes.TIPO_CANCEL_SOLICITUD};
        
    int[] TIPOS_SOLICITUD_JIFRES = {Constantes.TIPO_SOLICITUD,Constantes.TIPO_CANCEL_RESERVA};
    
    /**
     * Devuelve el usuario que corresponde con el login.
     * @param   login    el login para buscar si es correcto
     * @return  el usuario que le corresponde el login pasado por parametro
     * @throws  RemoteException en caso de producirse un fallo de comunicaciones
     * @throws  GestorConexionException En caso de producirse un error en el acceso
     *          a datos
     */       
    public UsuarioDTO consultarUsuario(String text) throws RemoteException,
            GestorConexionException;
       
    /**
     * Devuelve los roles que corresponde con un usuario.
     * @param   login    el login para buscar los roles
     * @return  Listado de roles que pertenecen al login pasado por parametro
     * @throws  RemoteException en caso de producirse un fallo de comunicaciones
     * @throws  GestorConexionException En caso de producirse un error en el acceso
     *          a datos
     */
    public List<RolDTO> consultarRoles (String login) throws RemoteException, 
            GestorConexionException;
    
    /**
     * Permite grabar una solicitud nueva
     * @param   solicitud       La solicitud a insertar
     * @param   fisicas         Características físicas solicitadas
     * @param   equipamiento    Equipamiento solicitado
     * @param   cantidad        Cantidad del equipamiento solicitado
     * @return  boolean         true: Si la solicitud se ha insertado correctamente,
     *                          false: en caso contrario
     * @throws  RemoteException en caso de producirse un fallo de comunicaciones
     * @throws  GestorConexionException En caso de producirse un error en el acceso
     *          a datos
     */
    public boolean grabarSolicitud (SolicitudDTO solicitud, 
            List<CFisicaDTO> fisicas,List<EquipamientoDTO> equipamiento, List<Integer> cantidad) throws RemoteException, 
            GestorConexionException;
    
        /**
     * Obtiene la solicitud de la que se envía por parámetro su identificador
     * @param idSolicitud      El identificador de solicitud
     * @return La solicitud de la que se quieren obtener todos sus datos
     * @throws RemoteException
     * @throws GestorAulasException
     */
    public SolicitudDTO getSolicitud(int idSolicitud) throws RemoteException,
            GestorConexionException;

    /**
     * Obtiene un listado de la base de datos con todas las solicitudes que cumplen
     * con los filtros establecidos.
     * @param pais      El país por el que se quiere filtrar
     * @param provincia La provincia por la que se quiere filtrar
     * @param ciudad    La ciudad por la que se quiere filtrar
     * @param tiposSol  Un array con la lista de tipos de solicitudes elegidas
     * @param estado    Id del estado de la solicitud
     * @param login     Id del cliente que hace la solicitud
     * @return La lista de las solicitudes filtradas por localización, tipos,
     * estados y usuario solicitante.
     * @throws RemoteException
     * @throws GestorAulasException
     */
    public List<SolicitudDTO> listaSolicitudes(LocalizacionDTO local, 
            List<Integer> tiposSol, Integer estado,String login) throws RemoteException,
            GestorConexionException;
    
    /**
     * Obtiene un listado de la base de datos con todas las solicitudes que cumplen
     * con los filtros establecidos.
     * @param pais      El país por el que se quiere filtrar
     * @param provincia La provincia por la que se quiere filtrar
     * @param ciudad    La ciudad por la que se quiere filtrar
     * @param tiposRes  Un array con la lista de tipos de solicitudes elegidas
     * @param login     Id del cliente que hace la solicitud
     * @return La lista de las solicitudes filtradas por localización, tipos,
     * estados y usuario solicitante.
     * @throws RemoteException
     * @throws GestorAulasException
     */
    public List<SolicitudDTO> listaReservas(LocalizacionDTO local, 
            List<Integer> tiposRes,Integer estado,String login) throws RemoteException,
            GestorConexionException;
    
    /**
     * Cancela la solicitud que se envía por parámetro su identificador
     * @param idSolicitud      El identificador de solicitud
     * @return Boolean, true si es correcta la eliminacion y false en caso contrario
     * @throws RemoteException
     * @throws GestorConexionException
     */
    public boolean cancelarSolicitud(int idSolicitud) throws RemoteException, GestorConexionException;
    
    /**
     * Cancela la reserva que se envía por parámetro su identificador
     * @param idReserva      El identificador de la reserva
     * @return Boolean, true si es correcta la eliminacion y false en caso contrario
     * @throws RemoteException
     * @throws GestorConexionException
     */
    public boolean cancelarReserva(int idReserva) throws RemoteException, GestorConexionException;  
}
